import asyncio
from fastmcp import Client


async def main():
    # 客户端会自动推断使用 StdioTransport 并执行该脚本
    # 由于客户端和服务器脚本在同一目录，直接使用文件名即可
    server_script = "mcp_server.py"

    async with Client(server_script) as client:
        # 调用远程工具
        # 注意：这里的 "Server" 是远程 mcp 实例的名称
        # 即 mcp_server.py 中定义的 "Server"
        # 在新版 fastmcp 中，工具调用不再需要通过服务器名称前缀
        result_add = await client.call_tool("add", {"num1": 1, "num2": 2})
        # call_tool 的结果是一个包含内容的列表，我们需要提取文本
        print(f"1 + 2 = {result_add[0].text}")

        result_sub = await client.call_tool("sub", {"num1": 5, "num2": 3})
        print(f"5 - 3 = {result_sub[0].text}")


if __name__ == "__main__":
    # 在Windows上，stdio传输可能需要不同的事件循环策略
    # asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
    asyncio.run(main())
